package com.fafu.controller;

import com.fafu.domian.user.Data;
import com.fafu.domian.user.ResultInfo;
import com.fafu.domian.user.User;
import com.fafu.service.UserService;
import com.fafu.tool.TokenUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.SortedMap;


@Controller
public class UserController {
	/**
	 * 依赖注入
	 */
	@Autowired
	private UserService userService;
	boolean flag;
	//创建一个结果返回对象
	ResultInfo info = new ResultInfo();
	User u =new User();

	/**
	 * 注册用户
	 * @param user
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/user/register")
	@ResponseBody
	public ResultInfo register(User user) throws Exception {
		//设置注册结果
		flag = userService.register(user);
		if(flag){
			//注册成功
			info.setFlag(true);
			info.setData(null);
			info.setMsg("注册成功！");
		}else {
			//注册失败
			info.setFlag(false);
			info.setData(null);
			info.setMsg("注册失败！");
		}
		//返回JSON结果集
		return info;
	}
	/**
	 * 激活用户
	 * @param code
	 * @return
	 */
	@RequestMapping("/user/active")
	public String active(@RequestParam("code") String code){
		//判断是否有code传入
		if ( code != null) {
			//通过code修改用户的激活状态
			flag = userService.active(code);
			if(flag){
				/*info.setFlag(true);
				info.setData(null);
				info.setMsg("激活成功");*/
				//转跳成功界面
				return "redirect:http://139.224.192.113:8080/welcome.html";
			}else{
				/*info.setFlag(false);
				info.setData(null);
				info.setMsg("激活失败");*/
			}
		}
		return "error";
	}

	/**
	 * 用户登录
	 * @param user
	 * @return
	 */
	@RequestMapping("/user/login")
	@ResponseBody
	public ResultInfo login(User user){
		User u = userService.login(user);
		//判断用户对象是否为null
		if(u == null){
			//用户名密码错误
			info.setFlag(false);
			info.setData(null);
			info.setMsg("用户名或密码错误");
		}
		//判断用户是否激活
		if(u != null && !"Y".equals(u.getStatus())){
			//用户尚未注册
			info.setFlag(false);
			info.setData(null);
			info.setMsg("您尚未激活，请激活");
		}
		//判断登录成功
		if(u !=null && "Y".equals(u.getStatus())){
			//发送请HTTP请求Token,等下回传用户信息和token
			Data data = new Data();
			data.setToken(TokenUtil.getToken(u.getUsername()));
			data.setUser(u);
			info.setData(data);
			//登录成功标记
			info.setFlag(true);
			info.setMsg("登录成功");
		}
		return info;
	}
	/**
	 * 修改密码
	 * @return
	 */
	@RequestMapping("/user/update")
	@ResponseBody
	public ResultInfo update(@RequestParam("token")String token, @RequestParam("username")String username ,@RequestParam("password") String password){
		flag = userService.update(token,username,password);
		if(flag){
			info.setFlag(true);
			info.setData(null);
			info.setMsg("修改密码成功");
		}else {
			info.setFlag(false);
			info.setData(null);
			info.setMsg("修改密码失败");
		}
		return info;
	}

	/**
	 * 忘记密码
	 * @param username
	 */
	@RequestMapping("/user/forget")
	@ResponseBody
	public void forget(@RequestParam("username") String username){
		userService.forget(username);
		return ;
	}

	/**
	 * 通过用户名和重置码登录(仅在忘记密码时使用该方法，重置密码使用一次后会修改)
	 * @param username
	 * @param code
	 * @return
	 */
	@RequestMapping("/user/reset")
	@ResponseBody
	public ResultInfo reset(@RequestParam("username")String username , @RequestParam("code")String code){
		User u =userService.reset(username,code);
		if(u == null){
			//用户名密码错误
			info.setFlag(false);
			info.setData(null);
			info.setMsg("用户名或重置码错误");
		}
		//判断用户是否激活
		if(u != null && !"Y".equals(u.getStatus())){
			//用户尚未注册
			info.setFlag(false);
			info.setData(null);
			info.setMsg("您尚未激活，请激活");
		}
		//判断登录成功
		if(u !=null && "Y".equals(u.getStatus())){
			//发送请HTTP请求Token,等下回传用户信息和token
			Data data = new Data();
			data.setToken(TokenUtil.getToken(u.getUsername()));
			data.setUser(u);
			info.setData(data);
			//登录成功标记
			info.setFlag(true);
			info.setMsg("登录成功");
			//修改code,防止复用
			/*userService.update(username,code);*/
		}
		return info;
	}
	/**
	 *  查找所有用户
	 *  暂不需要
	 */
	/*@RequestMapping("user/findAll")
	public String findAll(){
		List <User>list = userService.findAll();

		return "redirect:http://www.baidu.com" ;
		return "index";
	}
	*/

	/**
	 *  查询激活状态
	 */
	//允许接收POST/GET请求
	@RequestMapping("/user/checkstatus")
	//返回JSON数据
	@ResponseBody
	public ResultInfo checkstatus(String username){
		flag = userService.checkstatus(username);
		if(flag){
			info.setFlag(true);
			info.setData(null);
			info.setMsg("已激活");
		}else {
			info.setFlag(false);
			info.setData(null);
			info.setMsg("用户未激活");
		}
		return info;
	}

	/**
	 * 未收到激活邮件 ，重新发送
	 * 因为邮箱有“反垃圾系统”，有概率发送激活码的QQ被屏蔽
	 * 邮箱工具类中存了8个账号，随机获取发送，避免测试中，一个账号频繁发送邮件而被屏蔽
	 * @return
	 */
	@RequestMapping("/user/resend")
	@ResponseBody
	/**
	 * 网页修改密码
	 */
	public ResultInfo resend(String username){
		//判断激活状态
		flag = userService.checkstatus(username);
		//已激活，不发送邮件(防止垃圾邮件）
		if(flag){
			info.setFlag(false);
			info.setMsg("账户已激活");
			info.setData(null);
		}else {
			//发送激活邮件
			userService.resend(username);
			info.setFlag(true);
			info.setMsg("激活邮件已重新发送");
			info.setData(null);
		}
		return info;
	}
	@RequestMapping("/user/updatepassword")
	public String updatepassword(String code,String username, Model model){
		model.addAttribute("username",username);
		model.addAttribute("code",code);
		return "update";
	}
	/**
	 * 无需token 修改密码
	 */
	@RequestMapping("/user/updatebynewpsd")
	public String updatebynewpsd(String username,String code,String password){
		flag = userService.updatebyweb(username,code,password);
		if(flag){
			return "redirect:http://139.224.192.113:8080/welcome.html";
		}
		return "error";
	}

}
